﻿2026-08-08T22:31:33.5754254Z Current runner version: '2.336.0'
2026-08-08T22:31:33.5792965Z ##[group]Runner Image Provisioner
2026-08-08T22:31:33.5794302Z Hosted Compute Agent
2026-08-08T22:31:33.5795474Z Version: 20260707.563
2026-08-08T22:31:33.5796436Z Commit: 02667638d2b423fbc733a8e32a88b44996a3ba6e
2026-08-08T22:31:33.5797686Z Build Date: 2026-07-07T19:33:50Z
2026-08-08T22:31:33.5798750Z Worker ID: {c0e998fa-a020-45d1-ae17-a2f2880217ae}
2026-08-08T22:31:33.5799922Z Azure Region: eastus
2026-08-08T22:31:33.5800875Z ##[endgroup]
2026-08-08T22:31:33.5803224Z ##[group]Operating System
2026-08-08T22:31:33.5804354Z Ubuntu
2026-08-08T22:31:33.5805507Z 24.04.4
2026-08-08T22:31:33.5806375Z LTS
2026-08-08T22:31:33.5807240Z ##[endgroup]
2026-08-08T22:31:33.5808094Z ##[group]Runner Image
2026-08-08T22:31:33.5809222Z Image: ubuntu-24.04
2026-08-08T22:31:33.5810104Z Version: 20260720.247.2
2026-08-08T22:31:33.5812215Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260720.247/images/ubuntu/Ubuntu2404-Readme.md
2026-08-08T22:31:33.5815090Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260720.247
2026-08-08T22:31:33.5816714Z ##[endgroup]
2026-08-08T22:31:33.5818356Z ##[group]GITHUB_TOKEN Permissions
2026-08-08T22:31:33.5821258Z Contents: read
2026-08-08T22:31:33.5822273Z Metadata: read
2026-08-08T22:31:33.5823233Z ##[endgroup]
2026-08-08T22:31:33.5826938Z Secret source: Actions
2026-08-08T22:31:33.5828846Z Prepare workflow directory
2026-08-08T22:31:33.6376640Z Prepare all required actions
2026-08-08T22:31:33.6443621Z Getting action download info
2026-08-08T22:31:33.8242510Z Download action repository 'actions/checkout@v4' (SHA:11d5960a326750d5838078e36cf38b85af677262)
2026-08-08T22:31:34.0659155Z Download action repository 'actions/setup-python@v5' (SHA:a26af69be951a213d495a4c3e4e4022e16d87065)
2026-08-08T22:31:34.2550754Z Complete job name: Backend – full suite (minimum 667 tests)
2026-08-08T22:31:34.3285114Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:31:34.3293894Z ##[group]Run actions/checkout@v4
2026-08-08T22:31:34.3294657Z with:
2026-08-08T22:31:34.3295330Z   fetch-depth: 0
2026-08-08T22:31:34.3295878Z   repository: Gamexgit/FinanceManager
2026-08-08T22:31:34.3299804Z   token: ***
2026-08-08T22:31:34.3300308Z   ssh-strict: true
2026-08-08T22:31:34.3300824Z   ssh-user: git
2026-08-08T22:31:34.3301339Z   persist-credentials: true
2026-08-08T22:31:34.3301882Z   clean: true
2026-08-08T22:31:34.3302392Z   sparse-checkout-cone-mode: true
2026-08-08T22:31:34.3302986Z   fetch-tags: false
2026-08-08T22:31:34.3303501Z   show-progress: true
2026-08-08T22:31:34.3304014Z   lfs: false
2026-08-08T22:31:34.3304545Z   submodules: false
2026-08-08T22:31:34.3305409Z   set-safe-directory: true
2026-08-08T22:31:34.3306085Z   allow-unsafe-pr-checkout: false
2026-08-08T22:31:34.3306985Z env:
2026-08-08T22:31:34.3307451Z   PYTHONPATH: src
2026-08-08T22:31:34.3307965Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:34.3308743Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-backend/finance.sqlite3
2026-08-08T22:31:34.3309740Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-backend/runtime
2026-08-08T22:31:34.3310548Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:34.3311137Z ##[endgroup]
2026-08-08T22:31:34.4606521Z Syncing repository: Gamexgit/FinanceManager
2026-08-08T22:31:34.4609796Z ##[group]Getting Git version info
2026-08-08T22:31:34.4611923Z Working directory is '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T22:31:34.4614952Z [command]/usr/bin/git version
2026-08-08T22:31:34.4646155Z git version 2.54.0
2026-08-08T22:31:34.4758630Z ##[endgroup]
2026-08-08T22:31:34.4768522Z Temporarily overriding HOME='/home/runner/work/_temp/21cad458-beaf-48e3-b6be-2f3a9f4ddfe3' before making global git config changes
2026-08-08T22:31:34.4771411Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T22:31:34.4773555Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:34.4777298Z Deleting the contents of '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T22:31:34.4779169Z ##[group]Initializing the repository
2026-08-08T22:31:34.4780475Z [command]/usr/bin/git init /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:34.4866331Z hint: Using 'master' as the name for the initial branch. This default branch name
2026-08-08T22:31:34.4868515Z hint: will change to "main" in Git 3.0. To configure the initial branch name
2026-08-08T22:31:34.4877545Z hint: to use in all of your new repositories, which will suppress this warning,
2026-08-08T22:31:34.4878623Z hint: call:
2026-08-08T22:31:34.4879468Z hint:
2026-08-08T22:31:34.4880344Z hint: 	git config --global init.defaultBranch <name>
2026-08-08T22:31:34.4881272Z hint:
2026-08-08T22:31:34.4882285Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2026-08-08T22:31:34.4898537Z hint: 'development'. The just-created branch can be renamed via this command:
2026-08-08T22:31:34.4909925Z hint:
2026-08-08T22:31:34.4910994Z hint: 	git branch -m <name>
2026-08-08T22:31:34.4913001Z hint:
2026-08-08T22:31:34.4935562Z hint: Disable this message with "git config set advice.defaultBranchName false"
2026-08-08T22:31:34.4937845Z Initialized empty Git repository in /home/runner/work/FinanceManager/FinanceManager/.git/
2026-08-08T22:31:34.4951750Z [command]/usr/bin/git remote add origin https://github.com/Gamexgit/FinanceManager
2026-08-08T22:31:34.4997401Z ##[endgroup]
2026-08-08T22:31:34.4998595Z ##[group]Disabling automatic garbage collection
2026-08-08T22:31:34.4999547Z [command]/usr/bin/git config --local gc.auto 0
2026-08-08T22:31:34.5011163Z ##[endgroup]
2026-08-08T22:31:34.5012454Z ##[group]Setting up auth
2026-08-08T22:31:34.5016588Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T22:31:34.5107219Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T22:31:34.5728310Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T22:31:34.5732857Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T22:31:34.6907622Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T22:31:34.6927366Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T22:31:34.6931012Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2026-08-08T22:31:34.6934164Z ##[endgroup]
2026-08-08T22:31:34.6935697Z ##[group]Fetching the repository
2026-08-08T22:31:34.6938537Z [command]/usr/bin/git -c protocol.version=2 fetch --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* +8d40641010c4904ad6b504ba2ee642c1db72edae:refs/remotes/pull/48/merge
2026-08-08T22:31:35.4553196Z From https://github.com/Gamexgit/FinanceManager
2026-08-08T22:31:35.4558092Z  * [new branch]      Sprint14/twr-xirr-performance-attribution -> origin/Sprint14/twr-xirr-performance-attribution
2026-08-08T22:31:35.4561449Z  * [new branch]      Sprint15/household-import-transfer-reconciliation-v1 -> origin/Sprint15/household-import-transfer-reconciliation-v1
2026-08-08T22:31:35.4565176Z  * [new branch]      Sprint16/hotfix-openpyxl-runtime-dependency -> origin/Sprint16/hotfix-openpyxl-runtime-dependency
2026-08-08T22:31:35.4567929Z  * [new branch]      Sprint16/smart-household-inbox-real-data-onboarding-v2 -> origin/Sprint16/smart-household-inbox-real-data-onboarding-v2
2026-08-08T22:31:35.4571609Z  * [new branch]      feat/budget-analytics-data-explorer-v1   -> origin/feat/budget-analytics-data-explorer-v1
2026-08-08T22:31:35.4574992Z  * [new branch]      feat/budget-categories-duplicates-cleanup -> origin/feat/budget-categories-duplicates-cleanup
2026-08-08T22:31:35.4577924Z  * [new branch]      feat/budget-categories-ux-fix            -> origin/feat/budget-categories-ux-fix
2026-08-08T22:31:35.4580474Z  * [new branch]      feat/budget-import-production-v2         -> origin/feat/budget-import-production-v2
2026-08-08T22:31:35.4583381Z  * [new branch]      feat/budget-monthly-import-rule-learning-v1 -> origin/feat/budget-monthly-import-rule-learning-v1
2026-08-08T22:31:35.4586541Z  * [new branch]      feat/budget-phase-1-4                    -> origin/feat/budget-phase-1-4
2026-08-08T22:31:35.4589167Z  * [new branch]      feat/budget-planning-forecast-v1         -> origin/feat/budget-planning-forecast-v1
2026-08-08T22:31:35.4592025Z  * [new branch]      feat/budget-planning-usability-v2        -> origin/feat/budget-planning-usability-v2
2026-08-08T22:31:35.4595268Z  * [new branch]      feat/budget-review-bulk-assign-confirm   -> origin/feat/budget-review-bulk-assign-confirm
2026-08-08T22:31:35.4597619Z  * [new branch]      feat/budget-workflow-help-ux             -> origin/feat/budget-workflow-help-ux
2026-08-08T22:31:35.4600559Z  * [new branch]      feat/finance-command-center-monthly-close-v1 -> origin/feat/finance-command-center-monthly-close-v1
2026-08-08T22:31:35.4603529Z  * [new branch]      feat/fixed-costs-subscriptions-v1        -> origin/feat/fixed-costs-subscriptions-v1
2026-08-08T22:31:35.4606391Z  * [new branch]      feat/grocery-matching-review-learning-v2 -> origin/feat/grocery-matching-review-learning-v2
2026-08-08T22:31:35.4609650Z  * [new branch]      feat/grocery-product-price-providers-v1  -> origin/feat/grocery-product-price-providers-v1
2026-08-08T22:31:35.4616943Z  * [new branch]      feat/migros-product-savings-grocery-optimizer-v1 -> origin/feat/migros-product-savings-grocery-optimizer-v1
2026-08-08T22:31:35.4620399Z  * [new branch]      feat/mobile-nav-income-csv-final         -> origin/feat/mobile-nav-income-csv-final
2026-08-08T22:31:35.4623509Z  * [new branch]      feat/mobile-nav-income-hotfix-v2         -> origin/feat/mobile-nav-income-hotfix-v2
2026-08-08T22:31:35.4626947Z  * [new branch]      feat/mobile-nav-income-planning-v1       -> origin/feat/mobile-nav-income-planning-v1
2026-08-08T22:31:35.4630061Z  * [new branch]      fix/manual-entry-uat-flows               -> origin/fix/manual-entry-uat-flows
2026-08-08T22:31:35.4633163Z  * [new branch]      fix/sprint16.2-insurance-family-order    -> origin/fix/sprint16.2-insurance-family-order
2026-08-08T22:31:35.4636960Z  * [new branch]      hotfix/sprint13-global-portfolio-aggregation -> origin/hotfix/sprint13-global-portfolio-aggregation
2026-08-08T22:31:35.4640534Z  * [new branch]      hotfix/sprint20-wealth-history-contract  -> origin/hotfix/sprint20-wealth-history-contract
2026-08-08T22:31:35.4643756Z  * [new branch]      hotfix/sprint8-kpi-overflow              -> origin/hotfix/sprint8-kpi-overflow
2026-08-08T22:31:35.4647521Z  * [new branch]      hotfix/sprint8-readonly-render           -> origin/hotfix/sprint8-readonly-render
2026-08-08T22:31:35.4651016Z  * [new branch]      integration/portfolio-phase3-to-main     -> origin/integration/portfolio-phase3-to-main
2026-08-08T22:31:35.4653900Z  * [new branch]      main                                     -> origin/main
2026-08-08T22:31:35.4656826Z  * [new branch]      sprint10/portfolio-go-live               -> origin/sprint10/portfolio-go-live
2026-08-08T22:31:35.4659893Z  * [new branch]      sprint11/portfolio-completeness-ux       -> origin/sprint11/portfolio-completeness-ux
2026-08-08T22:31:35.4663118Z  * [new branch]      sprint12/truewealth-verified-import      -> origin/sprint12/truewealth-verified-import
2026-08-08T22:31:35.4666576Z  * [new branch]      sprint13/postfinance-ledger-import       -> origin/sprint13/postfinance-ledger-import
2026-08-08T22:31:35.4670442Z  * [new branch]      sprint16.1/classification-coverage-import-readiness -> origin/sprint16.1/classification-coverage-import-readiness
2026-08-08T22:31:35.4674308Z  * [new branch]      sprint16.2/first-import-calibration-portal-flow -> origin/sprint16.2/first-import-calibration-portal-flow
2026-08-08T22:31:35.4678903Z  * [new branch]      sprint16.3/import-readiness-batched-decisions-performance -> origin/sprint16.3/import-readiness-batched-decisions-performance
2026-08-08T22:31:35.4682404Z  * [new branch]      sprint17a/data-truth                     -> origin/sprint17a/data-truth
2026-08-08T22:31:35.4685418Z  * [new branch]      sprint17b/equity-quote-refresh           -> origin/sprint17b/equity-quote-refresh
2026-08-08T22:31:35.4688479Z  * [new branch]      sprint17b/household-cockpit              -> origin/sprint17b/household-cockpit
2026-08-08T22:31:35.4691686Z  * [new branch]      sprint17c/data-truth-navigation-today-lite -> origin/sprint17c/data-truth-navigation-today-lite
2026-08-08T22:31:35.4695497Z  * [new branch]      sprint19/prior-year-actuals-simple-budget-v1 -> origin/sprint19/prior-year-actuals-simple-budget-v1
2026-08-08T22:31:35.4698855Z  * [new branch]      sprint2/navigation-design-shell          -> origin/sprint2/navigation-design-shell
2026-08-08T22:31:35.4701995Z  * [new branch]      sprint20/performance-data-readiness-v1   -> origin/sprint20/performance-data-readiness-v1
2026-08-08T22:31:35.4705818Z  * [new branch]      sprint20b/performance-activation-daily-valuations-v1 -> origin/sprint20b/performance-activation-daily-valuations-v1
2026-08-08T22:31:35.4709903Z  * [new branch]      sprint20e/market-data-recovery-crypto-activation-v1 -> origin/sprint20e/market-data-recovery-crypto-activation-v1
2026-08-08T22:31:35.4713596Z  * [new branch]      sprint20e/never-run-status-hotfix        -> origin/sprint20e/never-run-status-hotfix
2026-08-08T22:31:35.4716907Z  * [new branch]      sprint20e/provider-provenance-ui-hotfix  -> origin/sprint20e/provider-provenance-ui-hotfix
2026-08-08T22:31:35.4720536Z  * [new branch]      sprint20f/truewealth-instrument-model-activation -> origin/sprint20f/truewealth-instrument-model-activation
2026-08-08T22:31:35.4724229Z  * [new branch]      sprint3.1/reconciliation-semantic-hardening -> origin/sprint3.1/reconciliation-semantic-hardening
2026-08-08T22:31:35.4728157Z  * [new branch]      sprint3/reconciliation-snapshot-foundation -> origin/sprint3/reconciliation-snapshot-foundation
2026-08-08T22:31:35.4731677Z  * [new branch]      sprint4.1/portfolio-policy-contract-hardening -> origin/sprint4.1/portfolio-policy-contract-hardening
2026-08-08T22:31:35.4735509Z  * [new branch]      sprint4/portfolio-policy-foundation      -> origin/sprint4/portfolio-policy-foundation
2026-08-08T22:31:35.4738912Z  * [new branch]      sprint5/portfolio-performance-foundation -> origin/sprint5/portfolio-performance-foundation
2026-08-08T22:31:35.4742797Z  * [new branch]      sprint6/portfolio-data-ingestion-reconciliation -> origin/sprint6/portfolio-data-ingestion-reconciliation
2026-08-08T22:31:35.4746781Z  * [new branch]      sprint7/postfinance-portfolio-source     -> origin/sprint7/postfinance-portfolio-source
2026-08-08T22:31:35.4749906Z  * [new branch]      sprint8/market-fx-benchmark-risk         -> origin/sprint8/market-fx-benchmark-risk
2026-08-08T22:31:35.4752870Z  * [new branch]      sprint9/portfolio-basis-policy           -> origin/sprint9/portfolio-basis-policy
2026-08-08T22:31:35.4755567Z  * [new tag]         v0.3.0                                   -> v0.3.0
2026-08-08T22:31:35.4757766Z  * [new tag]         v0.3.1                                   -> v0.3.1
2026-08-08T22:31:35.4760023Z  * [new tag]         v0.3.2                                   -> v0.3.2
2026-08-08T22:31:35.4762626Z  * [new ref]         8d40641010c4904ad6b504ba2ee642c1db72edae -> pull/48/merge
2026-08-08T22:31:35.4768483Z ##[endgroup]
2026-08-08T22:31:35.4770934Z ##[group]Determining the checkout info
2026-08-08T22:31:35.4773855Z ##[endgroup]
2026-08-08T22:31:35.4775623Z [command]/usr/bin/git sparse-checkout disable
2026-08-08T22:31:35.4848992Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-08-08T22:31:35.4879501Z ##[group]Checking out the ref
2026-08-08T22:31:35.4881442Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/48/merge
2026-08-08T22:31:35.5473501Z Note: switching to 'refs/remotes/pull/48/merge'.
2026-08-08T22:31:35.5486637Z 
2026-08-08T22:31:35.5487540Z You are in 'detached HEAD' state. You can look around, make experimental
2026-08-08T22:31:35.5489114Z changes and commit them, and you can discard any commits you make in this
2026-08-08T22:31:35.5490640Z state without impacting any branches by switching back to a branch.
2026-08-08T22:31:35.5491515Z 
2026-08-08T22:31:35.5492255Z If you want to create a new branch to retain commits you create, you may
2026-08-08T22:31:35.5493669Z do so (now or later) by using -c with the switch command. Example:
2026-08-08T22:31:35.5494508Z 
2026-08-08T22:31:35.5495421Z   git switch -c <new-branch-name>
2026-08-08T22:31:35.5496285Z 
2026-08-08T22:31:35.5496897Z Or undo this operation with:
2026-08-08T22:31:35.5497577Z 
2026-08-08T22:31:35.5497960Z   git switch -
2026-08-08T22:31:35.5498420Z 
2026-08-08T22:31:35.5499369Z Turn off this advice by setting config variable advice.detachedHead to false
2026-08-08T22:31:35.5500199Z 
2026-08-08T22:31:35.5501314Z HEAD is now at 8d40641 Merge fcb64edb70d90082ead266d402c31eb20f77c2f2 into c3525a03dd78a91b34f4cf0ae973c24d0ee37180
2026-08-08T22:31:35.5523922Z ##[endgroup]
2026-08-08T22:31:35.5577160Z [command]/usr/bin/git log -1 --format=%H
2026-08-08T22:31:35.5609569Z 8d40641010c4904ad6b504ba2ee642c1db72edae
2026-08-08T22:31:35.6019524Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:31:35.6022931Z ##[group]Run actions/setup-python@v5
2026-08-08T22:31:35.6023855Z with:
2026-08-08T22:31:35.6024617Z   python-version: 3.11
2026-08-08T22:31:35.6025745Z   cache: pip
2026-08-08T22:31:35.6026593Z   cache-dependency-path: requirements-ci.txt
2026-08-08T22:31:35.6027626Z   check-latest: false
2026-08-08T22:31:35.6032165Z   token: ***
2026-08-08T22:31:35.6032966Z   update-environment: true
2026-08-08T22:31:35.6033849Z   allow-prereleases: false
2026-08-08T22:31:35.6034817Z   freethreaded: false
2026-08-08T22:31:35.6035635Z env:
2026-08-08T22:31:35.6036378Z   PYTHONPATH: src
2026-08-08T22:31:35.6037195Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:35.6038344Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-backend/finance.sqlite3
2026-08-08T22:31:35.6039795Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-backend/runtime
2026-08-08T22:31:35.6040985Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:35.6041916Z ##[endgroup]
2026-08-08T22:31:35.7427379Z ##[group]Installed versions
2026-08-08T22:31:35.7500435Z (node:2016) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-08-08T22:31:35.7503447Z Successfully set up CPython (3.11.15)
2026-08-08T22:31:35.7505865Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-08-08T22:31:35.7511248Z ##[endgroup]
2026-08-08T22:31:35.8085224Z [command]/opt/hostedtoolcache/Python/3.11.15/x64/bin/pip cache dir
2026-08-08T22:31:36.1849584Z /home/runner/.cache/pip
2026-08-08T22:31:36.2853194Z pip cache is not found
2026-08-08T22:31:36.3089655Z ##[group]Run python -m pip install -e . -r requirements-ci.txt
2026-08-08T22:31:36.3091260Z [36;1mpython -m pip install -e . -r requirements-ci.txt[0m
2026-08-08T22:31:36.3150792Z shell: /usr/bin/bash -e {0}
2026-08-08T22:31:36.3151527Z env:
2026-08-08T22:31:36.3152039Z   PYTHONPATH: src
2026-08-08T22:31:36.3152645Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:36.3154189Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-backend/finance.sqlite3
2026-08-08T22:31:36.3156502Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-backend/runtime
2026-08-08T22:31:36.3157901Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:36.3158993Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:36.3160553Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:31:36.3162133Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:36.3163495Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:36.3165075Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:36.3166432Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:31:36.3167506Z ##[endgroup]
2026-08-08T22:31:36.8384261Z Obtaining file:///home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:36.8400230Z   Installing build dependencies: started
2026-08-08T22:31:37.7011863Z   Installing build dependencies: finished with status 'done'
2026-08-08T22:31:37.7017408Z   Checking if build backend supports build_editable: started
2026-08-08T22:31:38.0076804Z   Checking if build backend supports build_editable: finished with status 'done'
2026-08-08T22:31:38.0086590Z   Getting requirements to build editable: started
2026-08-08T22:31:38.3316328Z   Getting requirements to build editable: finished with status 'done'
2026-08-08T22:31:38.3321376Z   Preparing editable metadata (pyproject.toml): started
2026-08-08T22:31:38.5132121Z   Preparing editable metadata (pyproject.toml): finished with status 'done'
2026-08-08T22:31:38.6253008Z Collecting fastapi==0.136.1 (from -r requirements-ci.txt (line 1))
2026-08-08T22:31:38.6741634Z   Downloading fastapi-0.136.1-py3-none-any.whl.metadata (28 kB)
2026-08-08T22:31:38.6991254Z Collecting httpx==0.28.1 (from -r requirements-ci.txt (line 2))
2026-08-08T22:31:38.7038097Z   Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
2026-08-08T22:31:38.7198892Z Collecting Jinja2==3.1.6 (from -r requirements-ci.txt (line 3))
2026-08-08T22:31:38.7243039Z   Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T22:31:38.7387063Z Collecting openpyxl==3.1.5 (from -r requirements-ci.txt (line 4))
2026-08-08T22:31:38.7426294Z   Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:38.8447061Z Collecting pandas==3.0.3 (from -r requirements-ci.txt (line 5))
2026-08-08T22:31:38.8505368Z   Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB)
2026-08-08T22:31:38.9025826Z Collecting plotly==6.7.0 (from -r requirements-ci.txt (line 6))
2026-08-08T22:31:38.9081189Z   Downloading plotly-6.7.0-py3-none-any.whl.metadata (8.6 kB)
2026-08-08T22:31:38.9946401Z Collecting pydantic==2.13.4 (from -r requirements-ci.txt (line 7))
2026-08-08T22:31:38.9990534Z   Downloading pydantic-2.13.4-py3-none-any.whl.metadata (109 kB)
2026-08-08T22:31:39.0201203Z Collecting pypdf==6.14.2 (from -r requirements-ci.txt (line 8))
2026-08-08T22:31:39.0239722Z   Downloading pypdf-6.14.2-py3-none-any.whl.metadata (7.2 kB)
2026-08-08T22:31:39.0496175Z Collecting pytest==9.0.2 (from -r requirements-ci.txt (line 9))
2026-08-08T22:31:39.0552538Z   Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T22:31:39.3403659Z Collecting ruff==0.15.13 (from -r requirements-ci.txt (line 10))
2026-08-08T22:31:39.3454621Z   Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (26 kB)
2026-08-08T22:31:39.3749092Z Collecting streamlit==1.57.0 (from -r requirements-ci.txt (line 11))
2026-08-08T22:31:39.3811863Z   Downloading streamlit-1.57.0-py3-none-any.whl.metadata (9.6 kB)
2026-08-08T22:31:39.4015404Z Collecting uvicorn==0.47.0 (from -r requirements-ci.txt (line 12))
2026-08-08T22:31:39.4093337Z   Downloading uvicorn-0.47.0-py3-none-any.whl.metadata (6.7 kB)
2026-08-08T22:31:39.4262628Z Collecting xlrd==2.0.2 (from -r requirements-ci.txt (line 13))
2026-08-08T22:31:39.4310422Z   Downloading xlrd-2.0.2-py2.py3-none-any.whl.metadata (3.5 kB)
2026-08-08T22:31:39.4549964Z Collecting yfinance==1.3.0 (from -r requirements-ci.txt (line 14))
2026-08-08T22:31:39.4590507Z   Downloading yfinance-1.3.0-py2.py3-none-any.whl.metadata (6.1 kB)
2026-08-08T22:31:39.4804493Z Collecting starlette>=0.46.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.4841134Z   Downloading starlette-1.6.0-py3-none-any.whl.metadata (6.4 kB)
2026-08-08T22:31:39.5000200Z Collecting typing-extensions>=4.8.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.5048144Z   Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
2026-08-08T22:31:39.5139338Z Collecting typing-inspection>=0.4.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.5176250Z   Downloading typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T22:31:39.5265099Z Collecting annotated-doc>=0.0.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.5301684Z   Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)
2026-08-08T22:31:39.5474489Z Collecting anyio (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.5511282Z   Downloading anyio-4.14.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:39.5666920Z Collecting certifi (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.5703297Z   Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:39.5840055Z Collecting httpcore==1.* (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.5874931Z   Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
2026-08-08T22:31:39.6009056Z Collecting idna (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.6044945Z   Downloading idna-3.18-py3-none-any.whl.metadata (6.1 kB)
2026-08-08T22:31:39.6450588Z Collecting MarkupSafe>=2.0 (from Jinja2==3.1.6->-r requirements-ci.txt (line 3))
2026-08-08T22:31:39.6490051Z   Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB)
2026-08-08T22:31:39.6594234Z Collecting et-xmlfile (from openpyxl==3.1.5->-r requirements-ci.txt (line 4))
2026-08-08T22:31:39.6635851Z   Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
2026-08-08T22:31:39.8446870Z Collecting numpy>=1.26.0 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:39.8485404Z   Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (6.6 kB)
2026-08-08T22:31:39.8602618Z Collecting python-dateutil>=2.8.2 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:39.8643650Z   Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
2026-08-08T22:31:39.8978575Z Collecting narwhals>=1.15.1 (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T22:31:39.9017430Z   Downloading narwhals-2.24.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T22:31:39.9179248Z Collecting packaging (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T22:31:39.9225068Z   Downloading packaging-26.3-py3-none-any.whl.metadata (3.5 kB)
2026-08-08T22:31:39.9341807Z Collecting annotated-types>=0.6.0 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T22:31:39.9381170Z   Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T22:31:40.4846168Z Collecting pydantic-core==2.46.4 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T22:31:40.4887286Z   Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
2026-08-08T22:31:40.5013556Z Collecting iniconfig>=1.0.1 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.5051824Z   Downloading iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:40.5168923Z Collecting pluggy<2,>=1.5 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.5218845Z   Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T22:31:40.5737982Z Collecting pygments>=2.7.2 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.5778019Z   Downloading pygments-2.20.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:40.5937712Z Collecting altair!=5.4.0,!=5.4.1,<7,>=4.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.5975610Z   Downloading altair-6.2.2-py3-none-any.whl.metadata (11 kB)
2026-08-08T22:31:40.6117580Z Collecting blinker<2,>=1.5.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6154654Z   Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
2026-08-08T22:31:40.6304962Z Collecting cachetools<8,>=5.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6345178Z   Downloading cachetools-7.1.7-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T22:31:40.6490566Z Collecting click<9,>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6528626Z   Downloading click-8.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T22:31:40.6721224Z Collecting gitpython!=3.1.19,<4,>=3.0.7 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6759494Z   Downloading gitpython-3.1.58-py3-none-any.whl.metadata (13 kB)
2026-08-08T22:31:40.8131535Z Collecting pillow<13,>=7.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.8171380Z   Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.1 kB)
2026-08-08T22:31:40.8317458Z Collecting pydeck<1,>=0.8.0b4 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.8366438Z   Downloading pydeck-0.9.3-py2.py3-none-any.whl.metadata (4.2 kB)
2026-08-08T22:31:40.9514650Z Collecting protobuf<8,>=3.20 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.9555423Z   Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl.metadata (595 bytes)
2026-08-08T22:31:41.0560314Z Collecting pyarrow>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.0599624Z   Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.0 kB)
2026-08-08T22:31:41.0778493Z Collecting requests<3,>=2.27 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.0816424Z   Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T22:31:41.0948115Z Collecting tenacity<10,>=8.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.0986994Z   Downloading tenacity-9.1.4-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T22:31:41.1080225Z Collecting toml<2,>=0.10.1 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.1127116Z   Downloading toml-0.10.2-py2.py3-none-any.whl.metadata (7.1 kB)
2026-08-08T22:31:41.1414004Z Collecting httptools>=0.6.3 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.1453586Z   Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (3.5 kB)
2026-08-08T22:31:41.1579214Z Collecting python-multipart>=0.0.10 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.1621221Z   Downloading python_multipart-0.0.32-py3-none-any.whl.metadata (2.1 kB)
2026-08-08T22:31:41.2416810Z Collecting websockets>=12.0.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.2460031Z   Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (6.3 kB)
2026-08-08T22:31:41.2566424Z Collecting itsdangerous>=2.1.2 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.2604031Z   Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
2026-08-08T22:31:41.2941366Z Collecting watchdog<7,>=2.1.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.2986404Z   Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl.metadata (44 kB)
2026-08-08T22:31:41.3116558Z Collecting h11>=0.8 (from uvicorn==0.47.0->-r requirements-ci.txt (line 12))
2026-08-08T22:31:41.3167498Z   Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
2026-08-08T22:31:41.3322722Z Collecting multitasking>=0.0.7 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.3360287Z   Downloading multitasking-0.0.13-py3-none-any.whl.metadata (16 kB)
2026-08-08T22:31:41.3521151Z Collecting platformdirs>=2.0.0 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.3572467Z   Downloading platformdirs-4.11.1-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T22:31:41.3909511Z Collecting pytz>=2022.5 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.3958095Z   Downloading pytz-2026.3.post1-py2.py3-none-any.whl.metadata (22 kB)
2026-08-08T22:31:41.4286949Z Collecting frozendict>=2.3.4 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.4326684Z   Downloading frozendict-2.4.7-py3-none-any.whl.metadata (23 kB)
2026-08-08T22:31:41.4505757Z Collecting peewee>=3.16.2 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.4549858Z   Downloading peewee-4.3.0-py3-none-any.whl.metadata (10 kB)
2026-08-08T22:31:41.4700642Z Collecting beautifulsoup4>=4.11.1 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.4741355Z   Downloading beautifulsoup4-4.15.0-py3-none-any.whl.metadata (3.8 kB)
2026-08-08T22:31:41.5199969Z Collecting curl_cffi>=0.15 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.5240180Z   Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (17 kB)
2026-08-08T22:31:41.5552297Z Collecting jsonschema>=3.0 (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5590264Z   Downloading jsonschema-4.26.0-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T22:31:41.5761888Z Collecting gitdb<5,>=4.0.1 (from gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5805233Z   Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T22:31:41.5908664Z Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5945235Z   Downloading smmap-5.0.3-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:41.6810999Z Collecting charset_normalizer<4,>=2 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.6852342Z   Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (41 kB)
2026-08-08T22:31:41.7469675Z Collecting urllib3<3,>=1.26 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.7512903Z   Downloading urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB)
2026-08-08T22:31:41.7761912Z Collecting soupsieve>=1.6.1 (from beautifulsoup4>=4.11.1->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.7801147Z   Downloading soupsieve-2.9.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:41.8701799Z Collecting cffi>=2.0.0 (from curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.8743471Z   Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB)
2026-08-08T22:31:41.8876088Z Collecting pycparser (from cffi>=2.0.0->curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.8911877Z   Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB)
2026-08-08T22:31:41.9065891Z Collecting attrs>=22.2.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.9105077Z   Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)
2026-08-08T22:31:41.9213428Z Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.9251034Z   Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T22:31:41.9421519Z Collecting referencing>=0.28.4 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.9461924Z   Downloading referencing-0.37.0-py3-none-any.whl.metadata (2.8 kB)
2026-08-08T22:31:42.1519834Z Collecting rpds-py>=0.25.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:42.1561475Z   Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)
2026-08-08T22:31:42.1757701Z Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:42.1793670Z   Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
2026-08-08T22:31:42.1965234Z Downloading fastapi-0.136.1-py3-none-any.whl (117 kB)
2026-08-08T22:31:42.2023663Z Downloading httpx-0.28.1-py3-none-any.whl (73 kB)
2026-08-08T22:31:42.2079401Z Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)
2026-08-08T22:31:42.2139240Z Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
2026-08-08T22:31:42.2268735Z Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.3 MB)
2026-08-08T22:31:42.3085434Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3/11.3 MB 140.3 MB/s  0:00:00
2026-08-08T22:31:42.3149024Z Downloading plotly-6.7.0-py3-none-any.whl (9.9 MB)
2026-08-08T22:31:42.3853448Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 142.6 MB/s  0:00:00
2026-08-08T22:31:42.3897595Z Downloading pydantic-2.13.4-py3-none-any.whl (472 kB)
2026-08-08T22:31:42.3967483Z Downloading pypdf-6.14.2-py3-none-any.whl (349 kB)
2026-08-08T22:31:42.4031084Z Downloading pytest-9.0.2-py3-none-any.whl (374 kB)
2026-08-08T22:31:42.4096585Z Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)
2026-08-08T22:31:42.4700011Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 194.9 MB/s  0:00:00
2026-08-08T22:31:42.4768054Z Downloading streamlit-1.57.0-py3-none-any.whl (9.2 MB)
2026-08-08T22:31:42.5421911Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2/9.2 MB 143.4 MB/s  0:00:00
2026-08-08T22:31:42.5475632Z Downloading uvicorn-0.47.0-py3-none-any.whl (71 kB)
2026-08-08T22:31:42.5547751Z Downloading xlrd-2.0.2-py2.py3-none-any.whl (96 kB)
2026-08-08T22:31:42.5624040Z Downloading yfinance-1.3.0-py2.py3-none-any.whl (133 kB)
2026-08-08T22:31:42.5691077Z Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
2026-08-08T22:31:42.5788263Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 266.8 MB/s  0:00:00
2026-08-08T22:31:42.5828799Z Downloading altair-6.2.2-py3-none-any.whl (797 kB)
2026-08-08T22:31:42.5879588Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 797.6/797.6 kB 184.8 MB/s  0:00:00
2026-08-08T22:31:42.5917198Z Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
2026-08-08T22:31:42.5968207Z Downloading cachetools-7.1.7-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.6022599Z Downloading click-8.4.2-py3-none-any.whl (119 kB)
2026-08-08T22:31:42.6078826Z Downloading gitpython-3.1.58-py3-none-any.whl (220 kB)
2026-08-08T22:31:42.6141815Z Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
2026-08-08T22:31:42.6197174Z Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)
2026-08-08T22:31:42.6253097Z Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.9 MB)
2026-08-08T22:31:42.6792551Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.9/16.9 MB 325.0 MB/s  0:00:00
2026-08-08T22:31:42.6835467Z Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.9 MB)
2026-08-08T22:31:42.7082110Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 304.4 MB/s  0:00:00
2026-08-08T22:31:42.7122614Z Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
2026-08-08T22:31:42.7180589Z Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl (327 kB)
2026-08-08T22:31:42.7247608Z Downloading pydeck-0.9.3-py2.py3-none-any.whl (11.4 MB)
2026-08-08T22:31:42.7632808Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 313.8 MB/s  0:00:00
2026-08-08T22:31:42.7671782Z Downloading requests-2.34.2-py3-none-any.whl (73 kB)
2026-08-08T22:31:42.7726866Z Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (221 kB)
2026-08-08T22:31:42.7784079Z Downloading idna-3.18-py3-none-any.whl (65 kB)
2026-08-08T22:31:42.7838803Z Downloading smmap-5.0.3-py3-none-any.whl (24 kB)
2026-08-08T22:31:42.7896756Z Downloading tenacity-9.1.4-py3-none-any.whl (28 kB)
2026-08-08T22:31:42.7957871Z Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
2026-08-08T22:31:42.8020469Z Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB)
2026-08-08T22:31:42.8074576Z Downloading urllib3-2.7.0-py3-none-any.whl (131 kB)
2026-08-08T22:31:42.8131177Z Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl (79 kB)
2026-08-08T22:31:42.8190265Z Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
2026-08-08T22:31:42.8242756Z Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB)
2026-08-08T22:31:42.8304628Z Downloading anyio-4.14.2-py3-none-any.whl (125 kB)
2026-08-08T22:31:42.8353660Z Downloading beautifulsoup4-4.15.0-py3-none-any.whl (109 kB)
2026-08-08T22:31:42.8412171Z Downloading certifi-2026.7.22-py3-none-any.whl (136 kB)
2026-08-08T22:31:42.8467421Z Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.5 MB)
2026-08-08T22:31:42.8912491Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.5/13.5 MB 325.4 MB/s  0:00:00
2026-08-08T22:31:42.8945545Z Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (217 kB)
2026-08-08T22:31:42.8998407Z Downloading frozendict-2.4.7-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.9051078Z Downloading h11-0.16.0-py3-none-any.whl (37 kB)
2026-08-08T22:31:42.9104476Z Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (464 kB)
2026-08-08T22:31:42.9182938Z Downloading iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
2026-08-08T22:31:42.9234181Z Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.9301946Z Downloading jsonschema-4.26.0-py3-none-any.whl (90 kB)
2026-08-08T22:31:42.9357981Z Downloading attrs-26.1.0-py3-none-any.whl (67 kB)
2026-08-08T22:31:42.9412003Z Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)
2026-08-08T22:31:42.9468276Z Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB)
2026-08-08T22:31:42.9521013Z Downloading multitasking-0.0.13-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.9577979Z Downloading narwhals-2.24.0-py3-none-any.whl (461 kB)
2026-08-08T22:31:42.9644071Z Downloading packaging-26.3-py3-none-any.whl (129 kB)
2026-08-08T22:31:42.9700523Z Downloading peewee-4.3.0-py3-none-any.whl (179 kB)
2026-08-08T22:31:42.9756210Z Downloading platformdirs-4.11.1-py3-none-any.whl (23 kB)
2026-08-08T22:31:42.9815775Z Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (50.1 MB)
2026-08-08T22:31:43.3020343Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.1/50.1 MB 156.7 MB/s  0:00:00
2026-08-08T22:31:43.3061581Z Downloading pygments-2.20.0-py3-none-any.whl (1.2 MB)
2026-08-08T22:31:43.3130600Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 222.3 MB/s  0:00:00
2026-08-08T22:31:43.3173219Z Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
2026-08-08T22:31:43.3232919Z Downloading python_multipart-0.0.32-py3-none-any.whl (30 kB)
2026-08-08T22:31:43.3288002Z Downloading pytz-2026.3.post1-py2.py3-none-any.whl (508 kB)
2026-08-08T22:31:43.3355620Z Downloading referencing-0.37.0-py3-none-any.whl (26 kB)
2026-08-08T22:31:43.3408822Z Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (371 kB)
2026-08-08T22:31:43.3470760Z Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
2026-08-08T22:31:43.3522927Z Downloading soupsieve-2.9.2-py3-none-any.whl (37 kB)
2026-08-08T22:31:43.3578607Z Downloading starlette-1.6.0-py3-none-any.whl (75 kB)
2026-08-08T22:31:43.3638214Z Downloading typing_inspection-0.4.2-py3-none-any.whl (14 kB)
2026-08-08T22:31:43.3694601Z Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)
2026-08-08T22:31:43.3758680Z Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
2026-08-08T22:31:43.3817602Z Downloading pycparser-3.0-py3-none-any.whl (48 kB)
2026-08-08T22:31:43.6175170Z Building wheels for collected packages: jarvis-finance
2026-08-08T22:31:43.6183945Z   Building editable for jarvis-finance (pyproject.toml): started
2026-08-08T22:31:43.8301385Z   Building editable for jarvis-finance (pyproject.toml): finished with status 'done'
2026-08-08T22:31:43.8308239Z   Created wheel for jarvis-finance: filename=jarvis_finance-0.1.0-0.editable-py3-none-any.whl size=1510 sha256=a2664a704b3ecd87af688ad0c6cc6a7809ba20c8209ee6f62a21a5b3fbcf4906
2026-08-08T22:31:43.8310350Z   Stored in directory: /tmp/pip-ephem-wheel-cache-qbvnln2b/wheels/ad/81/a6/5383a3c32505f4e59976cc011a336e07c6284dcaf35f5a7ea5
2026-08-08T22:31:43.8324982Z Successfully built jarvis-finance
2026-08-08T22:31:43.9569477Z Installing collected packages: pytz, multitasking, xlrd, websockets, watchdog, urllib3, typing-extensions, toml, tenacity, soupsieve, smmap, six, ruff, rpds-py, python-multipart, pypdf, pygments, pycparser, pyarrow, protobuf, pluggy, platformdirs, pillow, peewee, packaging, numpy, narwhals, MarkupSafe, itsdangerous, iniconfig, idna, httptools, h11, frozendict, et-xmlfile, click, charset_normalizer, certifi, cachetools, blinker, attrs, annotated-types, annotated-doc, uvicorn, typing-inspection, requests, referencing, python-dateutil, pytest, pydantic-core, plotly, openpyxl, Jinja2, httpcore, gitdb, cffi, beautifulsoup4, anyio, starlette, pydeck, pydantic, pandas, jsonschema-specifications, jarvis-finance, httpx, gitpython, curl_cffi, yfinance, jsonschema, fastapi, altair, streamlit
2026-08-08T22:31:59.5402606Z 
2026-08-08T22:31:59.5437004Z Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.3 altair-6.2.2 annotated-doc-0.0.5 annotated-types-0.8.0 anyio-4.14.2 attrs-26.1.0 beautifulsoup4-4.15.0 blinker-1.9.0 cachetools-7.1.7 certifi-2026.7.22 cffi-2.1.1 charset_normalizer-3.4.9 click-8.4.2 curl_cffi-0.16.0 et-xmlfile-2.0.0 fastapi-0.136.1 frozendict-2.4.7 gitdb-4.0.12 gitpython-3.1.58 h11-0.16.0 httpcore-1.0.9 httptools-0.8.0 httpx-0.28.1 idna-3.18 iniconfig-2.3.0 itsdangerous-2.2.0 jarvis-finance-0.1.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 multitasking-0.0.13 narwhals-2.24.0 numpy-2.4.6 openpyxl-3.1.5 packaging-26.3 pandas-3.0.3 peewee-4.3.0 pillow-12.3.0 platformdirs-4.11.1 plotly-6.7.0 pluggy-1.6.0 protobuf-7.35.1 pyarrow-25.0.0 pycparser-3.0 pydantic-2.13.4 pydantic-core-2.46.4 pydeck-0.9.3 pygments-2.20.0 pypdf-6.14.2 pytest-9.0.2 python-dateutil-2.9.0.post0 python-multipart-0.0.32 pytz-2026.3.post1 referencing-0.37.0 requests-2.34.2 rpds-py-2026.6.3 ruff-0.15.13 six-1.17.0 smmap-5.0.3 soupsieve-2.9.2 starlette-1.6.0 streamlit-1.57.0 tenacity-9.1.4 toml-0.10.2 typing-extensions-4.16.0 typing-inspection-0.4.2 urllib3-2.7.0 uvicorn-0.47.0 watchdog-6.0.0 websockets-17.0.1 xlrd-2.0.2 yfinance-1.3.0
2026-08-08T22:31:59.5446138Z 
2026-08-08T22:31:59.5446590Z [notice] A new release of pip is available: 26.1.2 -> 26.2.1
2026-08-08T22:31:59.5447335Z [notice] To update, run: pip install --upgrade pip
2026-08-08T22:31:59.8293159Z ##[group]Run set -euo pipefail
2026-08-08T22:31:59.8293514Z [36;1mset -euo pipefail[0m
2026-08-08T22:31:59.8293854Z [36;1mmkdir -p /tmp/financemanager-phase3-backend/runtime[0m
2026-08-08T22:31:59.8294356Z [36;1mpython -m pytest tests -q | tee /tmp/financemanager-phase3-backend/pytest.log[0m
2026-08-08T22:31:59.8295426Z [36;1mpassed_count=$(sed -nE 's/.*(^|[^0-9])([0-9]+) passed.*/\2/p' /tmp/financemanager-phase3-backend/pytest.log | tail -n 1)[0m
2026-08-08T22:31:59.8295971Z [36;1mtest -n "${passed_count}"[0m
2026-08-08T22:31:59.8296466Z [36;1mtest "${passed_count}" -ge 667[0m
2026-08-08T22:31:59.8347239Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-08-08T22:31:59.8347599Z env:
2026-08-08T22:31:59.8347804Z   PYTHONPATH: src
2026-08-08T22:31:59.8348027Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:59.8348393Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-backend/finance.sqlite3
2026-08-08T22:31:59.8348940Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-backend/runtime
2026-08-08T22:31:59.8349331Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:59.8349664Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.8350112Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:31:59.8350564Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.8350950Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.8351334Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.8351734Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:31:59.8352063Z ##[endgroup]
2026-08-08T22:32:17.3513519Z ........................................................................ [  7%]
2026-08-08T22:32:30.3052049Z ........................................................................ [ 14%]
2026-08-08T22:32:42.9394617Z ........................................................................ [ 21%]
2026-08-08T22:32:57.6717888Z ........................................................................ [ 28%]
2026-08-08T22:33:09.8802796Z ........................................................................ [ 35%]
2026-08-08T22:33:20.9125571Z ........................................................................ [ 42%]
2026-08-08T22:33:31.8822492Z ........................................................................ [ 50%]
2026-08-08T22:33:51.4510425Z ........................................................................ [ 57%]
2026-08-08T22:34:05.2797868Z ........................................................................ [ 64%]
2026-08-08T22:34:29.7416216Z ........................................................................ [ 71%]
2026-08-08T22:34:47.1982428Z ........................................................................ [ 78%]
2026-08-08T22:34:58.9481034Z ........................................................................ [ 85%]
2026-08-08T22:35:10.7754497Z ........F............................................................... [ 93%]
2026-08-08T22:35:26.1567187Z .....................................................................    [100%]
2026-08-08T22:35:26.1568087Z =================================== FAILURES ===================================
2026-08-08T22:35:26.1569130Z ____ test_read_only_api_allows_preview_but_blocks_confirm_without_mutation _____
2026-08-08T22:35:26.1569792Z 
2026-08-08T22:35:26.1570284Z     def test_read_only_api_allows_preview_but_blocks_confirm_without_mutation():
2026-08-08T22:35:26.1571113Z         conn = database()
2026-08-08T22:35:26.1571698Z         add_bank_row(conn, "bank-1", "2026-01-30", "600")
2026-08-08T22:35:26.1572380Z         app = create_app(write_mode="disabled")
2026-08-08T22:35:26.1573031Z         app.dependency_overrides[get_db] = lambda: conn
2026-08-08T22:35:26.1573664Z         client = TestClient(app)
2026-08-08T22:35:26.1574182Z         body = {
2026-08-08T22:35:26.1574631Z             "period_from": "2026-01-01",
2026-08-08T22:35:26.1576138Z             "period_to": "2026-07-31",
2026-08-08T22:35:26.1576858Z             "recipient_name": "Example Recipient",
2026-08-08T22:35:26.1577452Z             "recipient_account_identity": None,
2026-08-08T22:35:26.1578023Z             "counterparty_hashes": ["a" * 64],
2026-08-08T22:35:26.1578578Z             "reference_tokens": [],
2026-08-08T22:35:26.1579269Z             "attestation": "Preview only; no recipient rule or cashflow is activated.",
2026-08-08T22:35:26.1579983Z         }
2026-08-08T22:35:26.1580630Z         before = conn.total_changes
2026-08-08T22:35:26.1581146Z         response = client.post(
2026-08-08T22:35:26.1581801Z             "/api/portfolio/performance/truewealth-bank-payments/preview",
2026-08-08T22:35:26.1582475Z             json=body,
2026-08-08T22:35:26.1582901Z         )
2026-08-08T22:35:26.1583329Z         assert response.status_code == 200
2026-08-08T22:35:26.1583922Z         assert response.json()["counts"]["secure"] == 1
2026-08-08T22:35:26.1584525Z         assert conn.total_changes == before
2026-08-08T22:35:26.1585331Z         for path in (
2026-08-08T22:35:26.1586115Z             "/api/portfolio/performance/truewealth/view?requested_from=2026-01-01&requested_to=2026-07-31",
2026-08-08T22:35:26.1587122Z             "/api/portfolio/performance/truewealth/model-preview?as_of=2026-07-31",
2026-08-08T22:35:26.1587819Z         ):
2026-08-08T22:35:26.1588245Z             readonly = client.get(path)
2026-08-08T22:35:26.1588835Z             assert readonly.status_code == 200, readonly.text
2026-08-08T22:35:26.1589454Z             assert conn.total_changes == before
2026-08-08T22:35:26.1590009Z         package = client.post(
2026-08-08T22:35:26.1590653Z             "/api/portfolio/performance/truewealth/activation-package-preview",
2026-08-08T22:35:26.1591337Z             json={
2026-08-08T22:35:26.1591753Z                 **body,
2026-08-08T22:35:26.1592228Z                 "performance_from": "2026-01-01",
2026-08-08T22:35:26.1592795Z                 "performance_to": "2026-07-31",
2026-08-08T22:35:26.1593336Z                 "model_as_of": "2026-07-31",
2026-08-08T22:35:26.1593846Z             },
2026-08-08T22:35:26.1594244Z         )
2026-08-08T22:35:26.1594845Z         assert package.status_code == 200, package.text
2026-08-08T22:35:26.1595595Z         assert package.json()["activation_package"]["production_writes"] == 0
2026-08-08T22:35:26.1596308Z         model_payload = client.get(
2026-08-08T22:35:26.1596982Z             "/api/portfolio/performance/truewealth/model-preview?as_of=2026-07-31"
2026-08-08T22:35:26.1597664Z         ).json()
2026-08-08T22:35:26.1598106Z >       assert set(model_payload) == {
2026-08-08T22:35:26.1598776Z             "as_of", "account_id", "status", "quality_status", "reason_codes",
2026-08-08T22:35:26.1599571Z             "modelled_value_chf", "latest_price_fx_date", "latest_modelled_value",
2026-08-08T22:35:26.1600259Z             "input_fingerprint",
2026-08-08T22:35:26.1600735Z         }
2026-08-08T22:35:26.1601374Z E       AssertionError: assert {'account_id'...fx_date', ...} == {'account_id'...lue_chf', ...}
2026-08-08T22:35:26.1602125Z E         
2026-08-08T22:35:26.1602547Z E         Extra items in the left set:
2026-08-08T22:35:26.1603052Z E         'anchor_date'
2026-08-08T22:35:26.1603501Z E         'net_external_cashflows_chf'
2026-08-08T22:35:26.1603990Z E         
2026-08-08T22:35:26.1604374Z E         Full diff:
2026-08-08T22:35:26.1605029Z E           {
2026-08-08T22:35:26.1605462Z E               'account_id',
2026-08-08T22:35:26.1605965Z E         +     'anchor_date',
2026-08-08T22:35:26.1606436Z E               'as_of',
2026-08-08T22:35:26.1606904Z E               'input_fingerprint',
2026-08-08T22:35:26.1607422Z E               'latest_modelled_value',
2026-08-08T22:35:26.1607952Z E               'latest_price_fx_date',
2026-08-08T22:35:26.1608473Z E               'modelled_value_chf',
2026-08-08T22:35:26.1609070Z E         +     'net_external_cashflows_chf',
2026-08-08T22:35:26.1609610Z E               'quality_status',
2026-08-08T22:35:26.1610343Z E               'reason_codes',
2026-08-08T22:35:26.1610824Z E               'status',
2026-08-08T22:35:26.1611278Z E           }
2026-08-08T22:35:26.1611566Z 
2026-08-08T22:35:26.1612030Z tests/unit/test_sprint20d_truewealth_productization.py:680: AssertionError
2026-08-08T22:35:26.1612870Z =============================== warnings summary ===============================
2026-08-08T22:35:26.1613799Z ../../../../../opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1
2026-08-08T22:35:26.1615819Z   /opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
2026-08-08T22:35:26.1617387Z     from starlette.testclient import TestClient as TestClient  # noqa
2026-08-08T22:35:26.1617944Z 
2026-08-08T22:35:26.1618412Z -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
2026-08-08T22:35:26.1619294Z =========================== short test summary info ============================
2026-08-08T22:35:26.1621031Z FAILED tests/unit/test_sprint20d_truewealth_productization.py::test_read_only_api_allows_preview_but_blocks_confirm_without_mutation - AssertionError: assert {'account_id'...fx_date', ...} == {'account_id'...lue_chf', ...}
2026-08-08T22:35:26.1622510Z   
2026-08-08T22:35:26.1622924Z   Extra items in the left set:
2026-08-08T22:35:26.1623405Z   'anchor_date'
2026-08-08T22:35:26.1623851Z   'net_external_cashflows_chf'
2026-08-08T22:35:26.1624320Z   
2026-08-08T22:35:26.1624845Z   Full diff:
2026-08-08T22:35:26.1625247Z     {
2026-08-08T22:35:26.1625636Z         'account_id',
2026-08-08T22:35:26.1626070Z   +     'anchor_date',
2026-08-08T22:35:26.1626578Z         'as_of',
2026-08-08T22:35:26.1627007Z         'input_fingerprint',
2026-08-08T22:35:26.1627490Z         'latest_modelled_value',
2026-08-08T22:35:26.1627981Z         'latest_price_fx_date',
2026-08-08T22:35:26.1628477Z         'modelled_value_chf',
2026-08-08T22:35:26.1628956Z   +     'net_external_cashflows_chf',
2026-08-08T22:35:26.1629462Z         'quality_status',
2026-08-08T22:35:26.1629919Z         'reason_codes',
2026-08-08T22:35:26.1630352Z         'status',
2026-08-08T22:35:26.1630753Z     }
2026-08-08T22:35:26.1631216Z 1 failed, 1004 passed, 1 warning in 205.31s (0:03:25)
2026-08-08T22:35:26.5367716Z ##[error]Process completed with exit code 1.
2026-08-08T22:35:26.5510254Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:35:26.5511427Z Post job cleanup.
2026-08-08T22:35:26.6513709Z [command]/usr/bin/git version
2026-08-08T22:35:26.6573967Z git version 2.54.0
2026-08-08T22:35:26.6621876Z Temporarily overriding HOME='/home/runner/work/_temp/8c530706-f7c7-45fe-a0db-e978bf19f433' before making global git config changes
2026-08-08T22:35:26.6623178Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T22:35:26.6645736Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:35:26.6726766Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T22:35:26.6795423Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T22:35:26.7177509Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T22:35:26.7230355Z http.https://github.com/.extraheader
2026-08-08T22:35:26.7241134Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-08-08T22:35:26.7297104Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T22:35:26.8018427Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T22:35:26.8120735Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T22:35:26.8756921Z Cleaning up orphan processes
2026-08-08T22:35:26.9070919Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-python@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
